1package phnparser
2
3import (
4 "crypto/md5"
5 "fmt"
6 "io/ioutil"
7 "log"
8 "strings"
9)
10
11var LibraryPath string
12
13var LibraryTitles []string
14var LibraryAuthors []string
15var LibraryFileLocations []string
16var LibraryFormats []string
17var LibraryFileSizes []int
18var LibraryHashes []string
19
20var LoadedBookLines []string
21var LoadedBookTitle string
22var LoadedBookAuthor string
23var LoadedBookHash string
24
25var MaxLengthOfLine int
26
27func checkError(error error) {
28 if error != nil {
29 log.Fatal(error)
30 }
31}
32
33func ScanLibraryFolder() {
34 files, err := ioutil.ReadDir(LibraryPath)
35 checkError(err)
36 var authors []string
37 var titles []string
38 var fileLocations []string
39 var formats []string
40 var fileSizes []int
41 var hashes []string
42 for _, file := range files {
43 if !file.IsDir() {
44 content, err := ioutil.ReadFile(LibraryPath + file.Name())
45 checkError(err)
46 fileSizes = append(fileSizes, len(content))
47 formats = append(formats, "PHN")
48 fileLocations = append(fileLocations, LibraryPath+file.Name())
49 authors = append(authors, strings.Split(string(strings.Split(string(content), "\n-+---+-BOOK CONTENT-+---+-")[0]), "-+---+-BOOK AUTHOR-+---+-\n")[1])
50 titles = append(titles, strings.Split(string(content), "\n-+---+-BOOK AUTHOR-+---+-")[0][25:])
51 hashes = append(hashes, fmt.Sprintf("%x", md5.Sum(content)))
52 }
53 }
54 LibraryTitles = titles
55 LibraryAuthors = authors
56 LibraryFileLocations = fileLocations
57 LibraryFormats = formats
58 LibraryFileSizes = fileSizes
59 LibraryHashes = hashes
60}
61
62func LoadBook(bookIndex int) {
63 LoadedBookTitle = LibraryTitles[bookIndex]
64 LoadedBookAuthor = LibraryAuthors[bookIndex]
65 LoadedBookHash = LibraryHashes[bookIndex]
66 content, err := ioutil.ReadFile(LibraryFileLocations[bookIndex])
67 checkError(err)
68 lines := strings.Split(strings.Split(string(content), "-+---+-BOOK CONTENT-+---+-\n")[1], "\n")
69 for _, line := range lines {
70 lineWithReturn := line + "\n"
71 currentBuffer := []rune{}
72 for _, character := range lineWithReturn {
73 if (len(currentBuffer) >= MaxLengthOfLine) || (string(character) == "\n") {
74 LoadedBookLines = append(LoadedBookLines, string(currentBuffer))
75 currentBuffer = []rune{}
76 }
77 currentBuffer = append(currentBuffer, character)
78 }
79 }
80}